//=======================================Copyright(c)===========================================
// 								  深圳易马达科技有限公司
//---------------------------------------文件信息----------------------------------------------
//文件名   	: CommCtrl.h
//创建人  	: Handry
//创建日期	: 
//描述	    : 通信控制头文件
//-----------------------------------------------当前版本修订----------------------------------
//修改人   	:
//版本	    :
//修改日期	:
//描述	    :
//=============================================================================================

#ifndef _COMMCTRL_H_
#define _COMMCTRL_H_

//=============================================================================================
//头文件
//=============================================================================================
#include "BSPTypeDef.h"

//=============================================================================================
//宏参数设定
//=============================================================================================
#define 	CTRL1_CHG_MASK 			0x0001
#define 	CTRL1_DSG_MASK	 		0x0002

#define 	CTRL1_PDS_MASK 			0x0004
#define 	CTRL1_PCH_MASK 			0x0008
#define 	CTRL1_BAL_MASK 			0x0010
#define 	CTRL1_LOP_MASK 			0x0020
#define 	CTRL1_SDP_MASK 			0x0040
#define 	CTRL1_CPI_MASK 			0x0080
#define 	CTRL1_ENBLAT_MASK 		0x8000	//s使能均衡测试模式

#define 	NVM_PERMIT_CMD_EN 		0x0001
#define 	USER_PERMIT_CMD_EN 		0x0001
#define 	USER_TESTENVIR_CMD_EN   0x0002
#define     USER_CLEAR_SOX_DATA     0x0004
#define     USER_MODIFY_SOC         0x0008
#define     USER_MOD_VOLT_CMD       0x1000  //更改第二节电压
#define     USER_MOD_HARD_VER       0x2000  //更改硬件版本号
#define     USER_CALI_ACC_OFFSET    0x4000  //校准加速度计
#define     UD_MODTEMP_EN 	        0x8000

//#define     USER_MOD_HARD_VER_ENABLE True   //使能更改硬件版本号

//=============================================================================================
//数据类型定义
//=============================================================================================
typedef struct
{
    u16 ctrl;
    u16 bmscer[8];
    u16 hostcer[8];
    u16 afeccal;
    u16 b16vcal;
    u16 yrmo;
    u16 dthr;
    u16 mnsc;
}t_MBREG_CTRL;

//=============================================================================================
//声明变量，供外部使用
//=============================================================================================
extern u16 gReSetCmd;							//复位命令
extern u16 gNVMPermitCmd;						//可操作配置寄存器标志位
extern u16 gUserPermitCmd;						//用户命令使能标志
extern u8  gModVoltTestCmd;                    //更改第二节电压标志

extern t_MBREG_CTRL gMBCtrl;                    //运行控制结构体
//=============================================================================================
//声明接口函数
//=============================================================================================
//=============================================================================================
//函数名称	: void CommCtrlIsDchgEnable(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，打开放电管
//注    意	:
//=============================================================================================
u8 CommCtrlIsDchgEnable(void);

//=============================================================================================
//函数名称	: void CommCtrlIsChgEnable(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，打开充电管
//注    意	:
//=============================================================================================
u8 CommCtrlIsChgEnable(void);

//=============================================================================================
//函数名称	: void CommCtrlIsPreDchgEnable(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，打开预放电管
//注    意	:
//=============================================================================================
u8 CommCtrlIsPreDchgEnable(void);

//=============================================================================================
//函数名称	: void CommCtrlIsSleepMode(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，进入浅度睡眠模式
//注    意	:
//=============================================================================================
u8 CommCtrlIsSleepMode(void);

//=============================================================================================
//函数名称	: void CommCtrlIsShDnMode(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，进入关机模式
//注    意	:
//=============================================================================================
u8 CommCtrlIsShDnMode(void);

//=============================================================================================
//函数名称	: void CommCtrlIsChargerPlugIn(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，充电枪插入
//注    意	:
//=============================================================================================
u8 CommCtrlIsChargerPlugIn(void);

//=============================================================================================
//函数名称	: void CommCtrlIsBalanceTestMode(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，进入均衡调试模式
//注    意	:
//=============================================================================================
u8 CommCtrlIsBalanceTestMode(void);

//=============================================================================================
//函数名称	: void CommCtrlDisable(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 禁止通信处理
//注    意	:
//=============================================================================================
void CommCtrlDisable(void);

//=============================================================================================
//函数名称	: void CommCtrlClearCtrl(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 清除通信控制
//注    意	:
//=============================================================================================
void CommCtrlClearCtrl(void);

//=============================================================================================
//函数名称	: void CommCtrlIsPollRec(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否有通信接收，1：有NFC通信；0：无NFC通信
//注    意	:
//=============================================================================================
u8 CommCtrlIsPollRec(void);

//=============================================================================================
//函数名称	: u32 Crc32_Calc(u32 crc,u8 *buffer, u32 size)  
//函数参数	: crc:要计算的crc buffer：要计算的buffer size：计算的长度
//输出参数	: void
//静态变量	: void
//功    能	: compute the crc32 code for buffer 计算CRC32
//注    意	:
//=============================================================================================
u32 Crc32_Calc(u32 crc,u8 *buffer, u32 size);

#endif

/*****************************************end of CommCtrl.h*****************************************/
